import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import test_elk from '../utils/test_elk.json'


Vue.use(Vuex)

export default new Vuex.Store({
  plugins: [
    createPersistedState({
      key: 'data', // 存储在localStorage中的键名
      paths: ['currentQuestion', 'answers', 'testDataLoaded'], // 需要持久化的状态
      storage: window.localStorage // 使用localStorage存储
    })
  ],
  state: {
    currentQuestion: 1, // 当前问题序号
    answers: [], // 存储用户的所有回答
    questionsData: null, // 存储题目数据
    testDataLoaded: false // 标记题目数据是否已加载
  },
  mutations: {
    // 设置当前问题序号
    setCurrentQuestion (state, questionNumber) {
      state.currentQuestion = questionNumber;
    },
    // 设置题目数据
    setQuestionsData (state, data) {
      state.questionsData = data;
      state.testDataLoaded = true;
    },
    // 重置测试状态
    resetTest (state) {
      state.currentQuestion = 1;
      state.answers = [];
    },
    // 清除所有数据（包括持久化存储的数据）
    clearAllData (state) {
      state.currentQuestion = 1;
      state.answers = [];
      state.questionsData = null;
      state.testDataLoaded = false;
      // 手动清除localStorage
      localStorage.removeItem('data');
    },
    // 添加用户答案
    addAnswer (state, { index, questionId, selectedOption, score, dimensions }) {
      // 存储答案
      state.answers.push({
        index,
        questionId,
        selectedOption,
        score,
        dimensions
      });
    }
  },
  actions: {
    // 异步加载题目数据，直接从本地JSON文件加载
    async fetchQuestionsData ({ commit, state }) {
      try {
        // 如果已经加载过数据，直接返回
        if (state.questionsData) {
          return state.questionsData;
        }

        // 加载题目数据
        const jsonData = test_elk;
        // console.log('jsonData', jsonData);


        // const jsonData = await response.json();



        // 提取问题数据
        let allQuestions = [];

        // 判断数据结构并提取问题
        // if (Array.isArray(jsonData)) {
        //   // 如果是数组，遍历每个元素寻找questions
        //   for (let i = 0; i < jsonData.length; i++) {
        //     if (jsonData[i] && typeof jsonData[i] === 'object' &&
        //       jsonData[i].questions && Array.isArray(jsonData[i].questions)) {
        //       allQuestions = allQuestions.concat(jsonData[i].questions);
        //     }
        //   }
        // } else if (jsonData && typeof jsonData === 'object') {
        //   // 如果是对象，直接查找questions属性
        //   if (jsonData.questions && Array.isArray(jsonData.questions)) {
        //     allQuestions = jsonData.questions;
        //   }
        // }

        if (jsonData.questions && Array.isArray(jsonData.questions)) {
          allQuestions = jsonData.questions;
        }

        // 添加结束标记
        const questions = allQuestions.map((question, index) => ({
          ...question,
          isLast: index === allQuestions.length - 1
        }));

        // 保存数据
        commit('setQuestionsData', questions);
        return questions;
      } catch (error) {
        console.error('加载题目数据失败:', error);
        return [];
      }
    }
  },
  getters: {
    // 获取所有问题列表
    allQuestions (state) {
      return state.questionsData || [];
    },

    // 获取当前题目的数据对象
    currentQuestionData (state, getters) {
      const questions = getters.allQuestions;
      const questionIndex = state.currentQuestion - 1;
      return questions[questionIndex] || null;
    },

    // 检查当前问题是否为最后一题
    isLastQuestion (state, getters) {
      const currentQuestion = getters.currentQuestionData;
      return currentQuestion && currentQuestion.isLast === true;
    },

    // 获取测试结果分析所需的数据
    testResultsData (state) {
      return {
        answers: state.answers,
        totalQuestions: state.questionsData ? state.questionsData.length : 0
      };
    }
  }
})